package com.yyn.unittest;

import com.yyn.bean.UserInfoBean;
import com.yyn.dao.UserInfoBeanMapper;
import com.yyn.utils.MyUtils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 新增操作
 */
public class TestDriver {

        /**
         * 查询操作（使用id的结果集进行in查询）
         */
        @Test
        public void test05() {
                {
                        // 推荐
                        String resource = "mybatis-config.xml";
                        try {
                                InputStream inputStream = Resources.getResourceAsStream(resource);
                                // 创建了mybatis的sqlSessionFactory工厂类:读取mybatis.xml配置文件，使用该配置文件中的参数信息，用于创建SqlSession对象
                                SqlSessionFactory sqlSessionFactory =
                                        new SqlSessionFactoryBuilder().build(inputStream);
                                // 获取一个SqlSession对象进行数据库操作
                                // SqlSession对象等价于 jdbc 的 statement；或者是 dbutils 的 QueryRunner
                                SqlSession session = sqlSessionFactory.openSession();
                                // 从mybatis的sqlsession对象中获取dao层的接口的实例对象
                                UserInfoBeanMapper userInfoBeanM = session.getMapper(UserInfoBeanMapper.class);
                                // 查询结果集的参数实体类
                                UserInfoBean userInfoB = new UserInfoBean();
                                // 修改操作需要设置实体类的主键，否则无法进行修改
                                // 设置实体类的参数
                                userInfoB.setUsername("user");
                                userInfoB.setUseraddress("青");
                                userInfoB.setUsertel("13");
                                userInfoB.setUserregdate(MyUtils.convertString2Date("2020-04-07","yyyy-MM-dd"));
                                userInfoB.setUserregdate2(MyUtils.convertString2Date("2020-04-10","yyyy-MM-dd"));

                                // 调用dao层接口的方法进行数据库操作
                                List<UserInfoBean> lstUserInfos = userInfoBeanM.getUserInfoByParams(userInfoB);
                                System.out.println("mybatis查询结果：");
                                System.out.println(lstUserInfos);

                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                }
        }

        /**
         * 查询操作（使用id的结果集进行in查询）
         */
        @Test
        public void test04() {
                {
                        // 推荐
                        String resource = "mybatis-config.xml";
                        try {
                                InputStream inputStream = Resources.getResourceAsStream(resource);
                                // 创建了mybatis的sqlSessionFactory工厂类:读取mybatis.xml配置文件，使用该配置文件中的参数信息，用于创建SqlSession对象
                                SqlSessionFactory sqlSessionFactory =
                                        new SqlSessionFactoryBuilder().build(inputStream);
                                // 获取一个SqlSession对象进行数据库操作
                                // SqlSession对象等价于 jdbc 的 statement；或者是 dbutils 的 QueryRunner
                                SqlSession session = sqlSessionFactory.openSession();
                                // 从mybatis的sqlsession对象中获取dao层的接口的实例对象
                                UserInfoBeanMapper userInfoBeanM = session.getMapper(UserInfoBeanMapper.class);
                                // 查询结果集的list
                                List<Integer> lstUserIds  = new ArrayList<>();
                                // 添加userid
                                lstUserIds.add(20);
                                lstUserIds.add(1);
                                lstUserIds.add(11);
                                lstUserIds.add(2);


                                // 调用dao层接口的方法进行数据库操作
                                List<UserInfoBean> userInfoBean = userInfoBeanM.selectByUserIds(lstUserIds);
                                System.out.println("mybatis查询结果：");
                                System.out.println(userInfoBean);

                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                }
        }

        /**
         * 修改操作
         */
        @Test
        public void test03() {
                {
                        // 推荐
                        String resource = "mybatis-config.xml";
                        try {
                                InputStream inputStream = Resources.getResourceAsStream(resource);
                                // 创建了mybatis的sqlSessionFactory工厂类:读取mybatis.xml配置文件，使用该配置文件中的参数信息，用于创建SqlSession对象
                                SqlSessionFactory sqlSessionFactory =
                                        new SqlSessionFactoryBuilder().build(inputStream);
                                // 获取一个SqlSession对象进行数据库操作
                                // SqlSession对象等价于 jdbc 的 statement；或者是 dbutils 的 QueryRunner
                                SqlSession session = sqlSessionFactory.openSession();
                                // 从mybatis的sqlsession对象中获取dao层的接口的实例对象
                                UserInfoBeanMapper userInfoBeanM = session.getMapper(UserInfoBeanMapper.class);
                                // 调用dao层接口的方法进行数据库操作
                                // 新增操作
                                // 创建一个UserInfoBean的实体类
                                UserInfoBean userInfoB = new UserInfoBean();
                                // 修改操作需要设置实体类的主键，否则无法进行修改
                                userInfoB.setUserid(17);
                                // 设置实体类的参数
                                userInfoB.setUsername("user10000");
                                userInfoB.setUserpsw("user10000");
                                userInfoB.setUseraddress("杭州");
                                userInfoB.setUserregdate(new Date());
                                // 调用保存方法
                                int i = userInfoBeanM.updateByPrimaryKeySelective(userInfoB);
                                // 手动提交事务
                                session.commit();// 默认不提交事务，需要手动进行提交
                                // session.rollback(); // 事务回滚
                                System.out.println("新增结果：");
                                System.out.println(i);

                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                }
        }

        /**
         * 新增操作
         */
        @Test
        public void test02() {
                {
                        // 推荐
                        String resource = "mybatis-config.xml";
                        try {
                                InputStream inputStream = Resources.getResourceAsStream(resource);
                                // 创建了mybatis的sqlSessionFactory工厂类:读取mybatis.xml配置文件，使用该配置文件中的参数信息，用于创建SqlSession对象
                                SqlSessionFactory sqlSessionFactory =
                                        new SqlSessionFactoryBuilder().build(inputStream);
                                // 获取一个SqlSession对象进行数据库操作
                                // SqlSession对象等价于 jdbc 的 statement；或者是 dbutils 的 QueryRunner
                                SqlSession session = sqlSessionFactory.openSession();
                                // 从mybatis的sqlsession对象中获取dao层的接口的实例对象
                                UserInfoBeanMapper userInfoBeanM = session.getMapper(UserInfoBeanMapper.class);
                                // 调用dao层接口的方法进行数据库操作
                                // 新增操作
                                // 创建一个UserInfoBean的实体类
                                UserInfoBean userInfoB = new UserInfoBean();
                                // 设置实体类的参数
                                userInfoB.setUsername("user10014");
                                userInfoB.setUserpsw("user10014");
                                userInfoB.setUseraddress("南京");
                                userInfoB.setUserregdate(new Date());
                                // 调用保存方法
                                int i = userInfoBeanM.insertSelective(userInfoB);
                                // 手动提交事务
                                session.commit();// 默认不提交事务，需要手动进行提交
                                // session.rollback(); // 事务回滚
                                System.out.println("新增结果：");
                                System.out.println(i);

                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                }
        }
        /**
         * 查询操作
         */
        @Test
        public void test01() {
                {
                        // 推荐
                        String resource = "mybatis-config.xml";
                        try {
                                InputStream inputStream = Resources.getResourceAsStream(resource);
                                // 创建了mybatis的sqlSessionFactory工厂类:读取mybatis.xml配置文件，使用该配置文件中的参数信息，用于创建SqlSession对象
                                SqlSessionFactory sqlSessionFactory =
                                        new SqlSessionFactoryBuilder().build(inputStream);
                                // 获取一个SqlSession对象进行数据库操作
                                // SqlSession对象等价于 jdbc 的 statement；或者是 dbutils 的 QueryRunner
                                SqlSession session = sqlSessionFactory.openSession();
                                // 从mybatis的sqlsession对象中获取dao层的接口的实例对象
                                UserInfoBeanMapper userInfoBeanM = session.getMapper(UserInfoBeanMapper.class);
                                // 调用dao层接口的方法进行数据库操作
                                UserInfoBean userInfoBean = userInfoBeanM.selectByPrimaryKey(9);
                                System.out.println("mybatis查询结果：");
                                System.out.println(userInfoBean);

                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                }
        }
}